package com.yida.gwj.finance.mapper;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.yida.gwj.api.domain.GwjFinanceAccountDetail;
import com.yida.gwj.api.domain.request.RemoteAccountDetailForRateRequest;

/**
 * 银行分类帐信息Mapper接口
 *
 * @author ruoyi
 * @date 2023-01-12
 */
public interface GwjFinanceAccountDetailMapper {
    /**
     * 查询银行分类帐信息
     *
     * @param accountDetailId 银行分类帐信息主键
     * @return 银行分类帐信息
     */
    public GwjFinanceAccountDetail selectGwjFinanceAccountDetailByAccountDetailId(Long accountDetailId);

    /**
     * 查询银行分类帐信息列表
     *
     * @param gwjFinanceAccountDetail 银行分类帐信息
     * @return 银行分类帐信息集合
     */
    public List<GwjFinanceAccountDetail> selectGwjFinanceAccountDetailList(GwjFinanceAccountDetail gwjFinanceAccountDetail);

    /**
     * 新增银行分类帐信息
     *
     * @param gwjFinanceAccountDetail 银行分类帐信息
     * @return 结果
     */
    public int insertGwjFinanceAccountDetail(GwjFinanceAccountDetail gwjFinanceAccountDetail);

    /**
     * 修改银行分类帐信息
     *
     * @param gwjFinanceAccountDetail 银行分类帐信息
     * @return 结果
     */
    public int updateGwjFinanceAccountDetail(GwjFinanceAccountDetail gwjFinanceAccountDetail);

    /**
     * 删除银行分类帐信息
     *
     * @param accountDetailId 银行分类帐信息主键
     * @return 结果
     */
    public int deleteGwjFinanceAccountDetailByAccountDetailId(Long accountDetailId);

    /**
     * 批量删除银行分类帐信息
     *
     * @param accountDetailIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteGwjFinanceAccountDetailByAccountDetailIds(Long[] accountDetailIds);

    /**
     * 根据业务ID删除银行分类帐信息
     *
     * @param bizId 业务ID
     * @return 结果
     */
    public int deleteGwjFinanceAccountDetailByBizId(Long bizId);

    /**
     * 查询银行分类帐信息列表（连表总账流水）
     *
     * @param gwjFinanceAccountDetail 银行分类帐信息
     * @return 银行分类帐信息集合
     */
    public List<GwjFinanceAccountDetail> selectGwjFinanceAccountDetailListWithMain(GwjFinanceAccountDetail gwjFinanceAccountDetail);

    int insertBatchGwjFinanceAccountDetail(@Param("details") ArrayList<GwjFinanceAccountDetail> gwjFinanceAccountDetails);

    List<GwjFinanceAccountDetail> getListForRate(RemoteAccountDetailForRateRequest request);

    /**
     * 删除分类账流水
     *
     * @param gwjFinanceAccountDetail
     * @return int
     */
    int deleteGwjFinanceAccountDetail(GwjFinanceAccountDetail gwjFinanceAccountDetail);

    // ----------------------------------新增功能区 s---------------------------------------------------------
    /**
     * 统计分类账数据
     * 
     * @param gwjFinanceAccountDetail
     * @return
     */
    Map<String, BigDecimal> selectGwjFinanceAccountDetailStatistics(GwjFinanceAccountDetail gwjFinanceAccountDetail);
    // ----------------------------------新增功能区 e---------------------------------------------------------

}
